package array.sliding_window;

import java.time.LocalDate;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;

/*      给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串的长度。

        示例 1:
        输入: s = "abcabcbb"
        输出: 3
        解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。

        示例 2:
        输入: s = "bbbbb"
        输出: 1
        解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。

        示例 3:
        输入: s = "pwwkew"
        输出: 3
        解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
        请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串*/
public class lc3 {
    public static void main(String[] args) {
      /*  String str1="abcabcbb";
        String str2="bbbbbbb";*/
        String str3="aab";
        /*System.out.println(IsRepeat(str1));
        System.out.println(IsRepeat(str2));
        System.out.println(IsRepeat(str3));*/
        System.out.println(lengthOfLongestSubstring(str3));

        LocalDate localDate=LocalDate.of(2024,2,13);
        LocalDate localDate1=localDate.plusDays(28);
        System.out.println(localDate1);

    }
  /*  字符串->字符数组： char[] chars=str.toCharArray();
    字符数组->字符串：String str=String.valueOf(chars)
    节选子字符串：String part_str=str.substring(begin,end)  左闭右开区间   */
    public static int lengthOfLongestSubstring(String s) {
        char[] chars=s.toCharArray();
        int left=0;
        int right=0;
        int cur_length=0;
        int longest_length=0;
        while (right<chars.length){
            String part_str = s.substring(left,right+1);
            while(IsRepeat(part_str)){
                part_str = s.substring(left+1,right+1);//left+1是为了排除掉当前left位置的字符
                left++;
            }
            right++;
            if(part_str.length()>longest_length||longest_length==0){
                longest_length=part_str.length();
            }
        }
        return longest_length;


    }

    public static boolean IsRepeat(String str){
        char[] chars=str.toCharArray();
        if(chars.length==1) return false;
        Arrays.sort(chars);
        for (int i = 0; i < chars.length-1; i++) {
            if(chars[i]==chars[i+1]){
                return true;
            }
        }
        return false;

    }

    public static boolean IsRepeat2(String str){
        char[] chars=str.toCharArray();
        if(chars.length==1) return false;
        HashSet set=new HashSet<>();
        for (int i=0;i<str.length();++i) {
            set.add(chars[i]);
        }

        if(set.size()==str.length()){
            return false;
        }
        return true;

    }
}
